package br.flf.webchat.mbean;

import java.util.List;

import br.flf.webchat.entidades.Cliente;
import br.flf.webchat.entidades.DialogoTO;
import br.flf.webchat.entidades.Funcionario;
import br.flf.webchat.excecoes.NegocioException;
import br.flf.webchat.mbean.utils.StatusAtendimento;
import br.flf.webchat.mbean.utils.TipoRetorno;
import br.flf.webchat.negocio.IControleAtendimentoFuncionarioBO;
import br.flf.webchat.negocio.factory.NegocioFactory;

public class AtendenteBean extends BaseBean {

	// -------------------------------------------Constantes
	/**
	 * Generated SerialVersionUID.
	 */
	private static final long serialVersionUID = 1L;

	// --------------------------------------------Atributos

	private Funcionario funcionario;

	private DialogoTO dialogoTO;

	// -------------------------------------Metodos Publicos
	public TipoRetorno prepararAtendimento() {
		return TipoRetorno.SUCESSO;
	}

	public TipoRetorno cadastrarFuncionarioParaAtendimento() {
		getControleAtendimentoFuncionarioBO()
				.cadastrarFuncionarioParaAtendimento(funcionario);
		adicionarMensgemDeSucesso("Funcionario cadastrado com sucesso.");
		return TipoRetorno.SUCESSO;
	}

	public TipoRetorno iniciarAtendimento() {

		try {
			this.dialogoTO = getControleAtendimentoFuncionarioBO()
					.iniciarAtendimento(funcionario);
			adicionarMensgemDeSucesso("Atendimento iniciado.");
		} catch (NegocioException e) {
			adicionarMensgemDeErro(e.getMessage());
			return TipoRetorno.ERRO;
		}

		return TipoRetorno.SUCESSO;
	}

	public TipoRetorno pararAtendimento() {

		adicionarMensgemDeSucesso("Atendimento parado.");
		return TipoRetorno.SUCESSO;
	}

	public TipoRetorno cancelarAtendimento() {

		getControleAtendimentoFuncionarioBO().cancelarAtendimento(
				getFuncionario());
		adicionarMensgemDeAlerta("Atendimento cancelado.");
		return TipoRetorno.SUCESSO;
	}

	// -------------------------------------Metodos Privados
	// ----------------------------------------Gets and Sets

	public List<Cliente> getListaCliente() {
		return NegocioFactory.getControleAtendimentoFuncionarioBO()
				.obterListaDeClientesParaAtendimento();
	}

	public Boolean getIsAtendimentoIniciado() {
		return StatusAtendimento.INICIADO.equals(getFuncionario()
				.getStatusAtendimento());
	}

	public IControleAtendimentoFuncionarioBO getControleAtendimentoFuncionarioBO() {
		return NegocioFactory.getControleAtendimentoFuncionarioBO();
	}

	/**
	 * @return the funcionario
	 */
	public Funcionario getFuncionario() {
		if (funcionario == null) {
			funcionario = new Funcionario();
		}
		return funcionario;
	}

	/**
	 * @param funcionario
	 *            the funcionario to set
	 */
	public void setFuncionario(Funcionario funcionario) {
		this.funcionario = funcionario;
	}

	/**
	 * @return the dialogoTO
	 */
	public DialogoTO getDialogoTO() {
		return dialogoTO;
	}

	/**
	 * @param dialogoTO
	 *            the dialogoTO to set
	 */
	public void setDialogoTO(DialogoTO dialogoTO) {
		this.dialogoTO = dialogoTO;
	}

}
